
#include "http.hpp"

#define WWWROOT "./wwwroot/"

string RequestStr(const HttpRequest& req)
{
    stringstream ss;
    ss << req._method << " " << req._path << " " << req._version << "\r\n";
    for(auto& param: req._params)
    {
        ss << param.first << ": " << param.second << "\r\n";
    }

    for(auto& header: req._headers)
    {
        ss << header.first << ": " << header.second << "\r\n";
    }
    ss << "\r\n";
    ss << req._body;
    return ss.str();
}
void Hello(const HttpRequest& req, HttpResponse* rsp)
{
    rsp->SetContent(RequestStr(req), "text/plain");
}
void Login(const HttpRequest& req, HttpResponse* rsp)
{
    
    rsp->SetContent(RequestStr(req), "text/plain");
}
void PutFile(const HttpRequest& req, HttpResponse* rsp)
{
    string pathname = WWWROOT + req._path;
    Util::WriteFile(pathname, req._body);
}
void DeleteFile(const HttpRequest& req, HttpResponse* rsp)
{
    rsp->SetContent(RequestStr(req), "text/plain");
}
int main()
{

    HttpServer server(8084);
    server.SetThreadCount(2);
    server.SetBaseDir(WWWROOT);    //设置静态资源根目录，告诉服务器如果有静态资源请求到来，要去哪里找资源文件
    server.Get("/hello", Hello);
    server.Post("/login", Login);
    server.Put("/1234.txt", PutFile);
    server.Delete("/1234.txt", DeleteFile);
    server.StartListen();
    return 0;
}


// void test_spilt()
// {
//     string src = "abc,,,asd,,cawr";
//     string sep = ",";
//     vector<string> arr;
//     Util::Split(src,sep,&arr);

//     for(auto e:arr)
//         cout << e << endl;

// }
// void test_file()
// {
//     Buffer buf;
//     string str;
//     bool ret = Util::ReadFile("./main.cc", &str);
//     buf.WriteStringAndPush(str);

//     ret = Util::WriteFile("./mime", str);

//     if(ret)
//         cout << buf.ReadPosition() << endl;

// }
// void test_url()
// {
//     string str = "C+++";
//     string res = Util::UrlEncode(str,false);
//     cout << res << endl;

//     string ret = Util::UrlDecode(res, false);

//     cout << ret << endl;
// }
// void test_statu()
// {
//     string str = Util::StatuDesc(404);
//     cout << str << endl;
// }
// void test_ExtMime()
// {
//     string str = Util::ExtMime("a.jpg");
//     cout << str << endl;
// }
// void test_Judgment_file()
// {
//     bool ret =  Util::IsDirectory("../HTTP");
//     if(ret)
//         cout << "Directory" << endl;
//     else
//         cout << "not Directory" << endl;

//     bool tmp =  Util::IsRegular("../HTTP");
//     if(tmp)
//         cout << "Regular" << endl;
//     else
//         cout << "not Regular" << endl;
// }
// void test_validPath()
// {
//     cout <<  Util::validPath("/html/../../impj.html") << endl;
// }

// int main()
// {
//     // test_validPath();

//     return 0;
// }
